using System;
using System.Collections.Generic;
using System.IO;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using ShoppingCenter.Backend.Api.Params;
using ShoppingCenter.Backend.Api.Utils;

namespace ShoppingCenter.Backend.Api.Controllers
{
    //[Authorize]
    [ApiController]
    [Route("[controller]")]
    public class FilesController : ControllerBase
    {

        //商品封面图的地址
        public static string url { get; set; }

        //支付方式二维码图的地址
        public static string payUrl { get; set; }
        private readonly IConfiguration _configuration;

        public FilesController(IConfiguration configuration)
        {
            _configuration = configuration;
        }


        //获取商品封面图
        [HttpGet("picPath")]
        public dynamic Get(string picUrl)
        {
            if (picUrl == "null" || picUrl == null)
            {
                return "";
            }
            else
            {
                var image = System.IO.File.OpenRead(picUrl);
                return File(image, "image/jpeg");
            }
        }

        //获取商品详情图（富文本）
        [HttpGet, Route("wangPicPath")]
        public dynamic GetWangPicPath(string wangPicUrl)
        {
            if (wangPicUrl == "null" || wangPicUrl == null)
            {
                return "";
            }
            else
            {
                var image = System.IO.File.OpenRead(wangPicUrl);
                return File(image, "image/jpeg");
            }
        }


        /// <summary>
        /// 商品封面图上传接口
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost, Route("uploadfiles")]
        public string UploadFiles(IFormCollection model)
        {
            // 获得当前应用所在的完整路径（绝对地址）
            var filePath = Directory.GetCurrentDirectory();

            // 通过配置文件获得存放文件的相对路径
            string path = _configuration["UploadFilesPath"];

            // 最终存放文件的完整路径
            var preFullPath = Path.Combine(filePath, path);
            // 如果路径不存在，则创建
            if (!Directory.Exists(preFullPath))
            {
                Directory.CreateDirectory(preFullPath);
            }

            var resultPath = new List<string>();
            foreach (IFormFile file in model.Files)
            {
                if (file.Length > 0)
                {
                    var fileName = file.FileName;
                    var extName = fileName.Substring(fileName.LastIndexOf("."));//extName包含了“.”
                    var tempPath = Path.Combine(path, Guid.NewGuid().ToString("N") + extName);
                    using (var stream = new FileStream(Path.Combine(filePath, tempPath), FileMode.CreateNew))//Path.Combine(_env.WebRootPath, fileName)
                    {
                        file.CopyTo(stream);

                    }

                    // 此处地址可能带有两个反斜杠，虽然也能用，比较奇怪，统一转换成斜杠，这样在任何平台都有一样的表现
                    resultPath.Add(tempPath.Replace("\\", "/"));
                    url = resultPath[0];
                }
            }

            var res = new
            {
                Code = 1000,
                Data = url,
                Msg = "封面图上传成功"
            };

            return JsonHelper.Serialize(res);
        }


        /// <summary>
        /// 商品详情图片上传接口（富文本）
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost, Route("uploadWangEditor")]
        public dynamic UploadWangEditor(IFormCollection model)
        {
            // 获得当前应用所在的完整路径（绝对地址）
            var filePath = Directory.GetCurrentDirectory();

            // 通过配置文件获得存放文件的相对路径
            string path = _configuration["UploadFilesPath"];

            // 最终存放文件的完整路径
            var preFullPath = Path.Combine(filePath, path);
            // 如果路径不存在，则创建
            if (!Directory.Exists(preFullPath))
            {
                Directory.CreateDirectory(preFullPath);
            }

            var wangResultPath = new List<string>();

            foreach (IFormFile file in model.Files)
            {
                if (file.Length > 0)
                {
                    var fileName = file.FileName;
                    var extName = fileName.Substring(fileName.LastIndexOf("."));//extName包含了“.”
                    var tempPath = Path.Combine(path, Guid.NewGuid().ToString("N") + extName);
                    using (var stream = new FileStream(Path.Combine(filePath, tempPath), FileMode.CreateNew))//Path.Combine(_env.WebRootPath, fileName)
                    {
                        file.CopyTo(stream);

                    }

                    // 此处地址可能带有两个反斜杠，虽然也能用，比较奇怪，统一转换成斜杠，这样在任何平台都有一样的表现
                    wangResultPath.Add(tempPath.Replace("\\", "/"));

                }
            }

            List<Wang> wangs = new List<Wang>();

            wangs.Add(new Wang
            {
                Url = "http://localhost:5000/files/wangPicPath?wangPicUrl=" + wangResultPath[0],
                Alt = "上传成功",
                // Href = "http://localhost:5000/files/wangPicPath?wangPicUrl="+Url
            });


            var res = new
            {
                // errno 即错误代码，0 表示没有错误。
                //如果有错误，errno != 0，可通过下文中的监听函数 fail 拿到该错误码进行自定义处理
                errno = 0,

                //data 是一个数组，返回图片Object，Object中包含需要包含url、alt和href三个属性,它们分别代表图片地址、图片文字说明和跳转链接,alt和href属性是可选的，可以不设置或设置为空字符串,需要注意的是url是一定要填的。
                data = wangs,
            };
            return res;

        }



        /// <summary>
        /// 支付方式图上传接口
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost, Route("UploadPayment")]
        public string UploadPayment(IFormCollection model)
        {
            // 获得当前应用所在的完整路径（绝对地址）
            var filePath = Directory.GetCurrentDirectory();

            // 通过配置文件获得存放文件的相对路径
            string path = _configuration["UploadFilesPath"];

            // 最终存放文件的完整路径
            var preFullPath = Path.Combine(filePath, path);
            // 如果路径不存在，则创建
            if (!Directory.Exists(preFullPath))
            {
                Directory.CreateDirectory(preFullPath);
            }

            var resultPath = new List<string>();
            foreach (IFormFile file in model.Files)
            {
                if (file.Length > 0)
                {
                    var fileName = file.FileName;
                    var extName = fileName.Substring(fileName.LastIndexOf("."));//extName包含了“.”
                    var tempPath = Path.Combine(path, Guid.NewGuid().ToString("N") + extName);
                    using (var stream = new FileStream(Path.Combine(filePath, tempPath), FileMode.CreateNew))//Path.Combine(_env.WebRootPath, fileName)
                    {
                        file.CopyTo(stream);

                    }

                    // 此处地址可能带有两个反斜杠，虽然也能用，比较奇怪，统一转换成斜杠，这样在任何平台都有一样的表现
                    resultPath.Add(tempPath.Replace("\\", "/"));
                    payUrl = resultPath[0];
                }
            }

            var res = new
            {
                Code = 1000,
                Data = payUrl,
                Msg = "支付方式图上传成功"
            };

            return JsonHelper.Serialize(res);
        }

    }
}


